﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace HospitalAdmision
{
    public partial class F_prescpricion : Form
    {
        //Instacia el objeto db del tipo cocinaYsanitarioEntites
        ProyHospitalEntities db = new ProyHospitalEntities();

        public F_prescpricion()
        {
            InitializeComponent();
        }
        private void limpiar() 
        {
            // Permite limpiar todas las cajas de texto
         
            text_buscar.Clear();
            Text_dosis.Clear();
            text_rmechazo.Clear();
            text_med.Clear();
            text_ana.Clear();
            text_cama.Clear();
            text_apellidoM.Clear();
            text_apellidoP.Clear();
            text_nombre.Clear();
        }

        int idUs = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            //si la caja de texto está en blanco muestra un mensaje
            if (text_buscar.Text == "")
            {
                // si no se encuentra muestra este mensaje 
                MessageBox.Show("Tiene que ingresar el rut del paciente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
            // de lo contrario busca los datos en la base de datos
            
               
                // permite llamar a la columna de tabla correspondiente
                Paciente pa = db.Paciente.FirstOrDefault(p => p.rut == text_buscar.Text);
                //si el objeto no está en blanco
                if (pa != null)
                {
                    //asigna las cajas de texto a las columnas de tabla correspondiente
                    text_nombre.Text = pa.nombres;
                    text_apellidoP.Text = pa.apePaterno;
                    text_apellidoM.Text = pa.apeMaterno;
                    // permite llamar a la columna de tabla correspondiente
                    Cama ca = db.Cama.FirstOrDefault(c=>c.FK_rut==text_buscar.Text);
                    // si son valor numerico se tranforman en un String
                    text_cama.Text = Convert.ToString(ca.id_cama);
                    
                }

                else
                {
                    // si no se encuentra muestra este mensaje 
                    MessageBox.Show("No exite el paciente", "advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                 }
            
        
            }
        
        private void bu_enviar_Click(object sender, EventArgs e)
        {
            //si la caja de texto del run esta vacía muestra un mensaje
            if (text_buscar.Text == "")
            {
                MessageBox.Show("Primero tiene que buscar el rut del paciente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                // pregunta si esta en blanco las cajas de texto 
                if ((Text_dosis.Text == "") || (text_med.Text == "") || (text_ana.Text == "") || (text_apellidoM.Text == "") || (text_apellidoP.Text == "") || (text_cama.Text == ""))
                {
                    // mensaje las cajas de texto estan vacias
                    MessageBox.Show("Tiene que ingresar todos los campos(*)", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                //lo guarda en las cajas de texto
                else
                {
                    Producto pro = db.Producto.FirstOrDefault(p => p.descripcion == text_med.Text);
                    if (pro != null)
                    {

                        // estas  variable permiten traformar las cajas de texto a enteros
                        int CAMA = Convert.ToInt32(text_cama.Text);
                        int DOSIS = Convert.ToInt32(Text_dosis.Text);
                        //asigna los valores de las cajas de texto a las columnas de la tabla Satitario
                        PrescripcionMedica pre = new PrescripcionMedica
                        {
                            //asigna las columnas de base de datos a las cajas de texto del formulario
                            descripcionMedicamento = text_med.Text,
                            dosis = DOSIS,
                            analisisPersona = text_ana.Text,
                            fechaPrescripcion = DateTime.Now,
                            motivoRechazo = text_rmechazo.Text,
                            estado = "pendiente",
                            FK_cama = CAMA,
                            FK_rut = text_buscar.Text
                        };


                        PrescripcionMedica paciente = db.PrescripcionMedica.FirstOrDefault(p => p.FK_rut == text_buscar.Text && p.estado == "Pendiente");
                        if (paciente != null)
                        {
                            MessageBox.Show("No se puede guardar la ficha por que esta pendiente", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                        else
                        {
                            // Pregunta si desea guardar los datos
                            if (MessageBox.Show("¿Desea guardar la ficha?", "Información", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                            {
                                //guarda los datos en la base de datos
                                db.PrescripcionMedica.Add(pre);
                                // realiza los cambios en la base de datos
                                db.SaveChanges();
                                // llama al metodo para limpiar las cajas de texto
                                limpiar();
                            }


                            else
                            {
                                // llama al metodo para limpiar las cajas de texto
                                limpiar();
                            }
                        }

                    }

                    else
                    {
                        MessageBox.Show("Medicamento no existe", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                }


            }
            
            
        }

        private void text_med_KeyPress(object sender, KeyPressEventArgs e)
        {
            // permite ingresar solo letras 
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            //Habilita la tecla “delete” del teclado
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            // se deshabilitan las teclas que no sean letras
            {
                e.Handled = true;
            }

        }

        private void text_ana_KeyPress(object sender, KeyPressEventArgs e)
        {
            // permite ingresar solo letras mayusculas y minisculas
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            // permite ingresar solo numeros
            else if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            // permite ingresar hacer espacion en blanco
            else if (Char.IsWhiteSpace(e.KeyChar))
            {
                e.Handled = false;
            }
            //permite utilizar el bonton del teclado borrar el catatel
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            // si no es igual que las 2 Condiciones lo va a mostrar
            {
                e.Handled = true;
            }

        }

        private void bu_salir_Click(object sender, EventArgs e)
        {
            //cierra  todos los formularios
            Application.Exit();

        }

        private void bu_ver_ficha_Click(object sender, EventArgs e)
        {
            // llama al formulario de ficha
            F_Ficha ficha = new F_Ficha();
            ficha.ShowDialog();

        }

        private void Text_dosis_KeyPress(object sender, KeyPressEventArgs e)
        {
             // permite ingresar solo numeros
             if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            //permite utilizar el bonton del teclado borrar el catatel
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            // si no es igual que las 2 Condiciones lo va a mostrar
            {
                e.Handled = true;
            }
        }
        public void recibeId(int id)
        {
            idUs = id;
        }

        private void F_prescpricion_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (idUs != 1)
            {
                FormIngreso fi = new FormIngreso();
                fi.Show();
            }
        }         
    }
}
